package com.example.springboot.controller.异常处理;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * 异常的视图解析器  会默认返回白页和json
 *
 * 否则返回自己指定的
 * 默认会再路径前加/error 解释了为啥放在 error 包下 会自动解析
 * 会根据状态码为视图页地址 找页面
 * 4xx  x:表示任意一个
 *
 * 目标方法运行期间 出现异常 都会直接catch 表示当前请求结束
 *  获得异常 进行 视图解析流程  再进入视图解析的异常的视图解析
 *
 *  遍历所有的 handlerExceptionResolvers，看谁能处理当前异常
 *      0= {DefaultrrorAttributes@6777} //先执行 将异常信息保存起来 返回null
 *            includeException = null
 *      1 = {HandlerExceptionResolverComposite@6778}//为空在执行
 *        (resolvers = {ArrayList@6784} size = 3
 *          0= {ExceptionHandlerExceptionResolver@6786}
 *           //可以处理带 @ExceptionHandler 注解的异常
 *
 *          1 = {ResponseStatusExceptionResolver@6787}
 *          //可以处理 带 @ResponseStatus 注解的自定义的异常
 *
 *
 *          2 = {DefaultHandlerExceptionResolver@6788}
 *          //处理spring...框架底层的异常
 *
 *    可以自定义异常解析器
 *    发现都不能处理异常
 *     ■ 1.最后会发送/error里 (thymeleaf 的功能)
 *       会被底层的BasicErrorController处理
 *     ■ 2、解析错误视图；遍历所有的  ErrorViewResolver  看谁能解析。
 *     ■ 3、默认的 DefaultErrorViewResolver ,
 *         作用是把响应状态码作为错误页的地址，error/500.html
 *     ■ 4、模板引擎最终响应这个页面 error/500.html
 *
 *      会先找精确的状态码页面 否则找 开头的
 *  最后还是返回 ModelAndView
 *
 *
 */
@Controller
public class 流程 {
    @GetMapping("/er")
    public String loginDemo(){
        int a=10/0;
        return "login";
    }
    @GetMapping("/erss")
    public String erss(){
        throw new 自定义异常();
    }
    @GetMapping("/era")
    public String era(@RequestParam("a") String a){
        return "login";
    }

}
